package com.cbg.es.repository;

import com.cbg.es.entity.EsCol;
import com.shuyuwl.core.repository.DaoRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 列名备份表 repository
 *
 * @author wangjuzheng
 * @since 2019-10-16
 */
@Repository
public interface IEsColRepository extends DaoRepository<EsCol, Long> {
    /**
     * 查询表名下启用的列的列表信息
     *
     * @param tableName 表名
     * @param status    状态
     * @return 列的列表信息
     */
    List<EsCol> findByTableNameAndStatusOrderBySortAsc(String tableName, Byte status);

    /**
     * 查询表名下未删除的列的列表信息
     *
     * @param tableName 表名
     * @param status    状态
     * @return 列的列表信息
     */
    List<EsCol> findByTableNameAndStatusLessThanOrderBySortAsc(String tableName, Byte status);

    /**
     * 查询表下的列名是否存在重复
     *
     * @param tableName    表名
     * @param colNameAlias 列名称
     * @param status       状态
     * @return 列信息
     */
    List<EsCol> findByTableNameAndColNameAliasAndStatusLessThan(String tableName, String colNameAlias, Byte status);

    /**
     * 查询表下的列名是否存在重复
     *
     * @param id     列id
     * @param status 状态
     * @return 列信息
     */
    EsCol findByIdAndStatusLessThan(Long id, Byte status);

    /**
     * 批量更新状态
     *
     * @param ids    列id集合
     * @param status 状态
     */
    @Modifying
    @Query("update EsCol set status =?2 where id in ?1")
    void updateEsCol(List<Long> ids, Byte status);

    /**
     * 根据表名删除状态
     *
     * @param tableName 表名称
     * @param status    删除状态
     */
    @Modifying
    @Query("update EsCol set status =?2 where  tableName = ?1")
    void deleteByTableName(String tableName, Byte status);

    /**
     * 获取表下最大的排序
     *
     * @param tableName 表名称
     * @param status    状态
     * @return 排序
     */
    @Query("select max(sort) from  EsCol where  status <?2 and tableName = ?1")
    Integer getMaxSOrt(String tableName, Byte status);
}
